<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>es6练习</title>
</head>

<body>

</body>
<script setup lang="ts">
    //解构数组
    // function bareakfast() {
    //     return['1','2','3']
    // };
    //一般写法
    // let temp = bareakfast();
    // console.log(temp[0],temp[1],temp[2]);
    //es6写法
    // let [ a , b , c ] = bareakfast();
    // console.log(a,b,c);


    //解构对象
    // function bareaklast() {
    //     return {a:'a' , b : 'b' , c : 'c'}
    // };
    //es6写法
    // let { a , b , c } = bareaklast();
    // console.log(a,b,c);

    //模板字符串
    // let a = '今天';
    // let b = '晚上';
    // let c = '吃火锅';
    //es6写法
    // let d = `${a}${b}${c}`;
    // console.log(d);

    //判断字符串里是否包含其他字符串
    // let str = '你好，我是小周 ❤️';
    // console.log(str.startsWith('你好'));
    // console.log(str.endsWith('❤️'));
    // console.log(str.endsWith('你好'));
    // console.log(str.includes(" "));


    //默认参数 ：当未传实参时，则使用定义的默认值;
    // function say(str) {
    //     console.log(str);
    // };
    // function say1(str = '嘿嘿') {
    //     console.log(str);
    // }
    // say();
    // say1();
    // say1('哈哈')

    //扩展运算符
    // let arr = [ 'a' , 'b' , 'c' ];
    // console.log(arr);
    // console.log(...arr);
    // let brr = ['d' , ...arr];
    // console.log(brr);
    // console.log(...brr);

    //剩余操作符
    // function f1(a,b,...c) {
    //     console.log(a,b,c);
    //     console.log(a,b,...c);
    // };
    // f1('aa','bb','cc','dd')

    //函数名
    // function f1() { }
    // console.log(f1.name);
    // let f2 = function () { };
    // console.log(f2.name);
    // let f3 = function f4() { };
    // console.log(f3.name);

    //箭头函数
    // let f1 = (a) => a;
    // let f2 = (a,b) => {
    //     return a + b;
    // };
    // console.log(f1(10));
    // console.log(f2(10,20));

    //对象表达式
    // let a = '㊙️';
    // let b = '☃️';
    // const obj = {
    //     a : a,
    //     b : a,
    //     say : function(){

    //     }
    // };
    // console.log(obj);
    // const es6obj = {
    //     a,
    //     b,
    //     say(){}
    // };
    // console.log(es6obj);

    //对象属性名
    // let obj = {};
    // let a = 'little name';
    // obj.name = '王子';
    // obj[a] = '大王子';
    // console.log(obj);

    //判断两个值是否相等 : 类似于===
    // console.log(NaN == NaN);
    // console.log(+0 == -0);
    // console.log(Object.is('123', 123));
    // console.log(Object.is(+0, -0));

    //复制对象
    // let obj = {};
    // Object.assign(
    //     obj,
    //     { a: 'aa' }
    // );
    // console.log(obj);

    //设置对象的prototype
    // let obj1 = {
    //     get(){
    //         return 1;
    //     }
    // };
    // let obj2 = {
    //     a : 10,
    //     get(){
    //         return 2;
    //     }
    // };
    // let test = Object.create(obj1);
    // console.log(test.get());
    // console.log(Object.getPrototypeOf(test) === obj1);
    // Object.setPrototypeOf(test,obj2);
    // console.log(test.get());
    // console.log(Object.getPrototypeOf(test) === obj2);

    //proto
    // let obj1 = {
    //     get() {
    //         return 1;
    //     }
    // };
    // let obj2 = {
    //     a: 10,
    //     get() {
    //         return 2;
    //     }
    // };
    // let test = {
    //     __proto__: obj1
    // };
    // console.log(test.get());
    // console.log(Object.getPrototypeOf(test) === obj1);
    // test.__proto__ = obj2;
    // console.log(test.get());
    // console.log(Object.getPrototypeOf(test) === obj2);

    //super
    // let obj1 = {
    //     get() {
    //         return 1;
    //     }
    // };
    // let test = {
    //     __proto__: obj1,
    //     get() {
    //         return super.get() + '1'
    //     }
    // };
    // console.log(test.get());

    //生成迭代器
    // function die(arr) {
    //     let i = 0;
    //     return {
    //         next() {
    //             let done = (i >= arr.length);
    //             let value = !done ? arr[i++] : undefined;

    //             return {
    //                 value,
    //                 done
    //             }
    //         }
    //     }
    // };
    // let arr = ['a', 'b', 'c'];
    // let dieArr = die(arr);
    // console.log(dieArr.next());
    // console.log(dieArr.next());
    // console.log(dieArr.next());
    // console.log(dieArr.next());

    // 类
    // class stu {
    //     constructor(name) {
    //         this.name = name;
    //     }
    //     say() {
    //         return this.name + '中午吃火锅'
    //     }
    // };
    // let sum = new stu('小明');
    // console.log(sum.say());

    //get set 用于获取或者修改类的属性
    // class stu {
    //     constructor(name) {
    //         this.name = name;
    //     }
    //     get() {
    //         return this.name;
    //     }
    //     set(newStr) {
    //         this.name = newStr;
    //     }
    // };
    // let stuArr = new stu('小明');
    // console.log(stuArr.get());
    // stuArr.set('大明');
    // console.log(stuArr.get());

    //static 使用static关键字修饰的方法，不用实例化也可以使用
    // class stu {
    //     static say(str) {
    //         console.log(str);
    //     }
    // }
    // stu.say('小明')

    //extends 使用继承，减少代码量
    // class Person {
    //     constructor(name, bir) {
    //         this.name = name;
    //         this.bir = bir;
    //     }
    //     showInfo() {
    //         return `姓名：${this.name};生日：${this.bir}`;
    //     }
    // };
    // class A extends Person {
    //     constructor(name, bir) {
    //         super(name, bir);
    //     }
    // };
    // let str = new A('周', '2002:12:3');
    // console.log(str.showInfo());

    //set 创建Set集合
    // let food = new Set('🍎🥪');
    // 重复添加，只有一个能进去
    // food.add('🍉');
    // food.add('🍉');
    // console.log(food);
    // 当前集合大小
    // console.log(food.size);
    // 判断集合中是否存在某一元素
    // console.log(food.has('🍉'));
    // 删除集合中某一元素
    // food.delete('🥪');
    // console.log(food);
    // 循环遍历集合
    // food.forEach(f => {
    // console.log(f);
    // });
    // 清空集合
    // food.clear();
    // console.log(food);

    //Map Map结合储存键值对
    // let food = new Map();
    // let a = {}, b = function () { }, c = "name";

    // food.set(a, '🍉');
    // food.set(b, '🥪');
    // food.set(b, '🥪');
    // food.set(c, '米饭');

    // console.log(food);
    // console.log(food.size);
    // console.log(food.get(a));
    // food.delete(c);
    // console.log(food);
    // console.log(food.has(a));

    // food.forEach((v, k) => {
    //     console.log(`${k} + ${v}`);
    // });
    // food.clear();
    // console.log(food);

</script>

</html>